const mongoose = require('mongoose');
const { Schema } = mongoose;
mongoose.connect('mongodb://localhost:27017/experiencemanager', { useNewUrlParser: true, useUnifiedTopology: true });
const UserSchema = new Schema({
    username: { type: String, default: '' },//有默认值的属性在插入时不添加数据会自动以默认值插入
    account:{type:Number},
    password:{type:String},
    faceimgpath:{type:String},
    remarks: { contents: { type: String }, date: { type: Date, default: Date.now } },//对插入这个对象的每一项对象数据的约束条件
    CollectionExp:{type:Array,default:[]}
});
const User = mongoose.model('User', UserSchema);

//注册用户方法
exports.registerUser = function (userinfo, callback) {
   function search(){
       let random=Math.round(Math.random()*10000000000)
       User.find({
           account:random
       }, function (err, res) {
           if (err) {
               callback({info:"注册失败"})
           }
           else {
               if (res.length == 0) {
                   const user = new User({
                       username: userinfo.username,
                       account:random,
                       password:userinfo.password,
                   })
                   user.save().then(() => {
                       callback({info:"注册成功",account:random})
                   });
               }
               else {
                   search()
               }
           }
       })
    }
    search()
}

//登录用户的方法
exports.searchUser=function (userinfo,callback) {
    User.find({
        account:userinfo.account,
        password:userinfo.password
    }, function (err, res) {
      if(err){
          callback(err)
      }
      else {
          if(res.length==0){
              callback({info:"密码或账号错误"})
          }else{
            callback({info:"登录成功",res})
          }
      }
    })
}

//更新编辑用户信息
exports.editUser=function (userinfo,callback) {
    console.log(userinfo.username)
    console.log(userinfo.faceimgpath)
   if(userinfo.faceimgpath==""){
       User.update({account:userinfo.account}, {
            username:userinfo.username,
            password:userinfo.password,
           remarks: { contents:userinfo.contents }
       }, function (err, ret) {
           if (err) {
               console.log({info:"更新失败"})
           } else {
               callback({info:"更新成功",ret})
           }
       })
   }else{
       User.update({account:userinfo.account}, {
           faceimgpath:userinfo.faceimgpath,

       }, function (err, ret) {
           if (err) {
               console.log({info:"更新失败"})
           } else {

               callback({info:"更新成功",faceimgpath:userinfo.faceimgpath,ret})
           }
       })
   }

}


//根据用户的关键字来模糊匹配用户名和介绍相近的数据
exports.ProbablyUserName=function (keyword,callback) {
    // 设置查询条件
    var _filter={
        $or: [  // 多字段同时匹配
            {"username": {$regex: keyword}},
            {"remarks.contents": {$regex: keyword}  }
        ]
    }
    var count = 0
    User.count(_filter, function (err, doc) { // 查询总条数（用于分页）
        if (err) {
            console.log(err)
        } else {
            count = doc
        }
    })


    User.find(_filter).limit(10) // 最多显示10条
        .sort({'account': -1}) // 倒序
        .exec(function (err, doc) { // 回调
            if (err) {
                callback({info:"404",err})
            } else {

                callback({code: "ok", data: doc, count: count})
            }
        })


}

//用户个人信息查询
exports.SearchUserInfo=function (account,callback) {
User.find({account},function (err,res) {
        if(err){
            callback("400")
        }else{
            callback(res)
        }
})
}

//收藏经验方法
exports.colExp=function (colInfo,callback) {
    User.find({
        account:colInfo.userAccount
    },function (err,res) {
        if(err){
            callback("400")
        }else{
            list=res[0].CollectionExp;
            list.push(colInfo)
            User.update({account:colInfo.userAccount}, {
                CollectionExp:list
            }, function (err, ret) {
                if (err) {
                    console.log({info:"收藏失败"})
                } else {
                    User.find({account:colInfo.userAccount},function (err,res) {
                        if(err){
                            callback("400")
                        }else{
                            callback({info:"收藏成功",res})
                        }
                    })
                }
            })

        }
    })

}


//取消收藏经验方法
exports.cancelcolExp=function (colInfo,callback) {
    User.find({
        account:colInfo.userAccount
    },function (err,res) {
        if(err){
            callback("400")
        }else{
            var arr1=res[0].CollectionExp;
            var arr2=[];
            function deleteZero(arr){
                for(var i=0,len=arr.length;i<len;i++){
                    if(parseInt(arr[i].expId)!=colInfo.expId){
                        arr2.push(arr[i])
                    }
                }
                return arr2;
            }
           let newlist= deleteZero(arr1)

            User.update({account:colInfo.userAccount}, {
                CollectionExp:newlist
            }, function (err, ret) {
                if (err) {
                    console.log({info:"取消收藏失败"})
                } else {
                    User.find({account:colInfo.userAccount},function (err,res) {
                        if(err){
                            callback("400")
                        }else{
                            callback({info:"取消收藏成功",res})
                        }
                    })
                }
            })

        }
    })

}

